/* 
 * File:   Jugador.cpp
 * Author: max
 * 
 * Created on November 17, 2012, 4:01 PM
 */

#include "Jugador.h"
using namespace TP::Juego;

Jugador::Jugador() {
    this->_nombre = "JUGADOR";
}

Jugador::Jugador(const string& pNombre){
    this->_nombre = pNombre;
}

Jugador::~Jugador() {
    
}

const string& Jugador::getNombre(){
    return this->_nombre;
}

string Jugador::aXML(){

    TiXmlDocument* doc = new TiXmlDocument();
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());

    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

string Jugador::aXML(const string& pPath){

    TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());
    
    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

void Jugador::parseXML (const string& pDescriptor){

    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
    this->deElementoXML(doc.FirstChildElement());
}

TiXmlElement* Jugador::aElementoXML (){
    
    TiXmlElement * element = new TiXmlElement("Jugador");

    element->SetAttribute("nombre", this->getNombre().c_str());  
    return element;
}

void Jugador::deElementoXML (TiXmlElement* pElemento){

    if (strcmp (pElemento->Value(), "Jugador") == 0)
    {
        this->_nombre = pElemento->Attribute("nombre");
    }
}

bool Jugador::operator== (const Jugador& pJugador){
    return  this->_nombre == pJugador._nombre;
}

Jugador* Jugador::crearDeXML (const string& pDescriptor) throw (Excepcion&){
    
    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);   
    
    if (0 != strcmp (doc.FirstChildElement()->Value(), "Jugador"))
        throw Excepcion ("El descriptor XML no corresponde a un descriptor de Jugador.");
    
    Jugador* jugador = new Jugador();
    jugador->deElementoXML(doc.FirstChildElement());
    return jugador;
}